1
Điều tra hiệu suất học tập
DSAI2202Lab 8: Composing Data Operations

Nhóm hỗ trợ học tập cần một danh sách các lượt đăng ký đang học có kết quả gần đây bị giảm sút. Hãy so sánh mỗi sinh viên với chính kết quả trước đó của họ trong cùng một môn học.

Thống nhất các quy tắc

  1. Sử dụng hai giai đoạn: trước đó và gần đây. Mỗi giai đoạn có hai bài đánh giá có trọng số bằng nhau.
  2. Yêu cầu ít nhất hai điểm không NULL trong mỗi giai đoạn trước khi so sánh điểm trung bình.
  3. Tính decline_points = earlier_avg - recent_avg.
  4. Mức giảm ít nhất 15 điểm nghĩa là Cần xem xét. Nếu không, một lượt đăng ký đủ điều kiện sẽ có Không cảnh báo.
  5. Giữ riêng Không đủ dữ liệu riêng biệt. Điểm 0 là điểm hợp lệ; còn NULL hoặc bản ghi bị thiếu không phải là điểm 0.

Chuẩn bị cơ sở dữ liệu của bạn

Mở tệp lab8_setup.sql được cung cấp trong thư mục TA DSAI2202/lab8/ trong pgAdmin và chạy toàn bộ tệp. Mỗi khi mở một kết nối mới, hãy dùng lại cài đặt kết nối ở bên phải.

Phần thiết lập cũng cung cấp performance_comparison, một truy vấn đã lưu được gọi là view. Nó sẽ hỗ trợ các bài tập sau này; đây không phải là một bảng bổ sung chứa kết quả đánh giá được lưu trữ.

✍️ Kiểm tra trước khi tính toán
Hãy kiểm tra E01, E07, E08, E09 và E24. Xác định những lượt nào có đủ điểm ở cả hai giai đoạn. Giải thích vì sao các điểm 0 của E24 cung cấp bằng chứng mạnh hơn các giá trị NULL của E08.
Đặt schema
SET search_path TO lab8;
Kiểm tra số lượng
SET search_path TO lab8;

SELECT 'students' AS table_name, COUNT(*) AS row_count
FROM students
UNION ALL SELECT 'courses', COUNT(*) FROM courses
UNION ALL SELECT 'enrolments', COUNT(*) FROM enrolments
UNION ALL SELECT 'assessment_results', COUNT(*) FROM assessment_results
UNION ALL SELECT 'support_units', COUNT(*) FROM support_units
ORDER BY table_name;
Kiểm tra bằng chứng
SET search_path TO lab8;

SELECT e.enrolment_id, e.student_id, e.course_code,
       r.result_id, r.period, r.assessment_no, r.score
FROM enrolments AS e
JOIN assessment_results AS r
  ON r.enrolment_id = e.enrolment_id
WHERE e.enrolment_id IN ('E01', 'E07', 'E08', 'E09', 'E24')
ORDER BY e.enrolment_id, r.period, r.assessment_no;